home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / bin / memusage < prev    next >
Encoding:
Text File  |  2008-11-14  |  7.4 KB  |  275 lines

  1. #! /usr/bin/bash
  2. # Copyright (C) 1999-2004, 2005, 2006, 2007 Free Software Foundation, Inc.
  3. # This file is part of the GNU C Library.
  4. # Contributed by Ulrich Drepper <drepper@gnu.org>, 1999.
  5.  
  6. # The GNU C Library is free software; you can redistribute it and/or
  7. # modify it under the terms of the GNU Lesser General Public
  8. # License as published by the Free Software Foundation; either
  9. # version 2.1 of the License, or (at your option) any later version.
  10.  
  11. # The GNU C Library is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14. # Lesser General Public License for more details.
  15.  
  16. # You should have received a copy of the GNU Lesser General Public
  17. # License along with the GNU C Library; if not, write to the Free
  18. # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  19. # 02111-1307 USA.
  20.  
  21. memusageso='/\$LIB/libmemusage.so'
  22. memusagestat='/usr/bin/memusagestat'
  23. TEXTDOMAIN=libc
  24.  
  25. # Print usage message.
  26. do_usage() {
  27.   echo >&2 $"Try \`memusage --help' for more information."
  28.   exit 1
  29. }
  30.  
  31. # Message for missing argument.
  32. do_missing_arg() {
  33.   echo >&2 $"memusage: option \`$1' requires an argument"
  34.   do_usage
  35. }
  36.  
  37. # Print help message
  38. do_help() {
  39.   echo $"Usage: memusage [OPTION]... PROGRAM [PROGRAMOPTION]...
  40. Profile memory usage of PROGRAM.
  41.  
  42.    -n,--progname=NAME     Name of the program file to profile
  43.    -p,--png=FILE          Generate PNG graphic and store it in FILE
  44.    -d,--data=FILE         Generate binary data file and store it in FILE
  45.    -u,--unbuffered        Don't buffer output
  46.    -b,--buffer=SIZE       Collect SIZE entries before writing them out
  47.       --no-timer          Don't collect additional information through timer
  48.    -m,--mmap              Also trace mmap & friends
  49.  
  50.    -?,--help              Print this help and exit
  51.       --usage             Give a short usage message
  52.    -V,--version           Print version information and exit
  53.  
  54.  The following options only apply when generating graphical output:
  55.    -t,--time-based        Make graph linear in time
  56.    -T,--total             Also draw graph of total memory use
  57.       --title=STRING      Use STRING as title of the graph
  58.    -x,--x-size=SIZE       Make graphic SIZE pixels wide
  59.    -y,--y-size=SIZE       Make graphic SIZE pixels high
  60.  
  61. Mandatory arguments to long options are also mandatory for any corresponding
  62. short options.
  63.  
  64. For bug reporting instructions, please see:
  65. <http://www.gnu.org/software/libc/bugs.html>."
  66.   exit 0
  67. }
  68.  
  69. do_version() {
  70.   echo 'memusage (GNU libc) 2.7'
  71.   printf $"Copyright (C) %s Free Software Foundation, Inc.
  72. This is free software; see the source for copying conditions.  There is NO
  73. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  74. " "2007"
  75.   printf $"Written by %s.
  76. " "Ulrich Drepper"
  77.   exit 0
  78. }
  79.  
  80. # These variables are local
  81. buffer=
  82. data=
  83. memusagestat_args=
  84. notimer=
  85. png=
  86. progname=
  87. tracemmap=
  88.  
  89. # Process arguments.  But stop as soon as the program name is found.
  90. while test $# -gt 0; do
  91.   case "$1" in
  92.   -V | --v | --ve | --ver | --vers | --versi | --versio | --version)
  93.     do_version
  94.     ;;
  95.   -\? | --h | --he | --hel | --help)
  96.     do_help
  97.     ;;
  98.   --us | --usa | --usag | --usage)
  99.     echo $"Syntax: memusage [--data=FILE] [--progname=NAME] [--png=FILE] [--unbuffered]
  100.             [--buffer=SIZE] [--no-timer] [--time-based] [--total]
  101.             [--title=STRING] [--x-size=SIZE] [--y-size=SIZE]
  102.             PROGRAM [PROGRAMOPTION]..."
  103.     exit 0
  104.     ;;
  105.   -n | --pr | --pro | --prog | --progn | --progna | --prognam | --progname)
  106.     if test $# -eq 1; then
  107.       do_missing_arg $1
  108.     fi
  109.     shift
  110.     progname="$1"
  111.     ;;
  112.   --pr=* | --pro=* | --prog=* | --progn=* | --progna=* | --prognam=* | --progname=*)
  113.     progname=${1##*=}
  114.     ;;
  115.   -p | --pn | --png)
  116.     if test $# -eq 1; then
  117.       do_missing_arg $1
  118.     fi
  119.     shift
  120.     png="$1"
  121.     ;;
  122.   --pn=* | --png=*)
  123.     png=${1##*=}
  124.     ;;
  125.   -d | --d | --da | --dat | --data)
  126.     if test $# -eq 1; then
  127.       do_missing_arg $1
  128.     fi
  129.     shift
  130.     data="$1"
  131.     ;;
  132.   --d=* | --da=* | --dat=* | --data=*)
  133.     data=${1##*=}
  134.     ;;
  135.   -u | --un | --unb | --unbu | --unbuf | --unbuff | --unbuffe | --unbuffer | --unbuffere | --unbuffered)
  136.     buffer=1
  137.     ;;
  138.   -b | --b | --bu | --buf | --buff | --buffe | --buffer)
  139.     if test $# -eq 1; then
  140.       do_missing_arg $1
  141.     fi
  142.     shift
  143.     buffer="$1"
  144.     ;;
  145.   --b=* | --bu=* | --buf=* | --buff=* | --buffe=* | --buffer=*)
  146.     buffer=${1##*=}
  147.     ;;
  148.   --n | --no | --no- | --no-t | --no-ti | --no-tim | --no-time | --no-timer)
  149.     notimer=yes
  150.     ;;
  151.   -m | --m | --mm | --mma | --mmap)
  152.     tracemmap=yes
  153.     ;;
  154.   -t | --tim | --time | --time- | --time-b | --time-ba | --time-bas | --time-base | --time-based)
  155.     memusagestat_args="$memusagestat_args -t"
  156.     ;;
  157.   -T | --to | --tot | --tota | --total)
  158.     memusagestat_args="$memusagestat_args -T"
  159.     ;;
  160.   --tit | --titl | --title)
  161.     if test $# -eq 1; then
  162.       do_missing_arg $1
  163.     fi
  164.     shift
  165.     memusagestat_args="$memusagestat_args -s $1"
  166.     ;;
  167.   --tit=* | --titl=* | --title=*)
  168.     memusagestat_args="$memusagestat_args -s ${1##*=}"
  169.     ;;
  170.   -x | --x | --x- | --x-s | --x-si | --x-siz | --x-size)
  171.     if test $# -eq 1; then
  172.       do_missing_arg $1
  173.     fi
  174.     shift
  175.     memusagestat_args="$memusagestat_args -x $1"
  176.     ;;
  177.   --x=* | --x-=* | --x-s=* | --x-si=* | --x-siz=* | --x-size=*)
  178.     memusagestat_args="$memusagestat_args -x ${1##*=}"
  179.     ;;
  180.   -y | --y | --y- | --y-s | --y-si | --y-siz | --y-size)
  181.     if test $# -eq 1; then
  182.       do_missing_arg $1
  183.     fi
  184.     shift
  185.     memusagestat_args="$memusagestat_args -y $1"
  186.     ;;
  187.   --y=* | --y-=* | --y-s=* | --y-si=* | --y-siz=* | --y-size=*)
  188.     memusagestat_args="$memusagestat_args -y ${1##*=}"
  189.     ;;
  190.   --p | --p=* | --t | --t=* | --ti | --ti=* | --u)
  191.     echo >&2 $"memusage: option \`${1##*=}' is ambiguous"
  192.     do_usage
  193.     ;;
  194.   --)
  195.     # Stop processing arguments.
  196.     shift
  197.     break
  198.     ;;
  199.   --*)
  200.     echo >&2 $"memusage: unrecognized option \`$1'"
  201.     do_usage
  202.     ;;
  203.   *)
  204.     # Unknown option.  This means the rest is the program name and parameters.
  205.     break
  206.     ;;
  207.   esac
  208.   shift
  209. done
  210.  
  211. # See whether any arguments are left.
  212. if test $# -eq 0; then
  213.   echo >&2 $"No program name given"
  214.   do_usage
  215. fi
  216.  
  217. # This will be in the environment.
  218. add_env="LD_PRELOAD=$memusageso"
  219.  
  220. # Generate data file name.
  221. datafile=
  222. if test -n "$data"; then
  223.   datafile="$data"
  224. elif test -n "$png"; then
  225.   datafile=$(mktemp -t memusage.XXXXXX) || exit
  226.   trap 'rm -f "$datafile"; exit 1' HUP INT QUIT TERM PIPE
  227. fi
  228. if test -n "$datafile"; then
  229.   add_env="$add_env MEMUSAGE_OUTPUT=$datafile"
  230. fi
  231.  
  232. # Set program name.
  233. if test -n "$progname"; then
  234.   add_env="$add_env MEMUSAGE_PROG_NAME=$progname"
  235. fi
  236.  
  237. # Set buffer size.
  238. if test -n "$buffer"; then
  239.   add_env="$add_env MEMUSAGE_BUFFER_SIZE=$buffer"
  240. fi
  241.  
  242. # Disable timers.
  243. if test -n "$notimer"; then
  244.   add_env="$add_env MEMUSAGE_NO_TIMER=yes"
  245. fi
  246.  
  247. # Trace mmap.
  248. if test -n "$tracemmap"; then
  249.   add_env="$add_env MEMUSAGE_TRACE_MMAP=yes"
  250. fi
  251.  
  252. # Execute the program itself.
  253. eval $add_env '"$@"'
  254. result=$?
  255.  
  256. # Generate the PNG data file if wanted and there is something to generate
  257. # it from.
  258. if test -n "$png" -a -n "$datafile" -a -s "$datafile"; then
  259.   # Append extension .png if it isn't already there.
  260.   case $png in
  261.   *.png) ;;
  262.   *) png="$png.png" ;;
  263.   esac
  264.   $memusagestat $memusagestat_args "$datafile" "$png"
  265. fi
  266.  
  267. if test -z "$data" -a -n "$datafile"; then
  268.   rm -f "$datafile"
  269. fi
  270.  
  271. exit $result
  272. # Local Variables:
  273. #  mode:ksh
  274. # End:
  275.